package main

import "fmt"

/*
   值类型：改变变量富文本的时候，不会改变变量本身的值（数组，基本数据类型，结构体）
   引用类型：改变变量富文本的时候，会改变变量本身的值（切片，map）
*/

type People struct {
	name string
	age  int
}

// 结构体方法   给People结构体 添加一个 ChangeAge方法
func (p People) ChangeAge(age int) { //值类型 不能修改实例的值
	p.age = age
	fmt.Printf("%#v\n", p)
}

func (p *People) ChangeName(name string) { // 指针类型  可以修改实例的值
	p.name = name
	fmt.Printf("%#v\n", p)
}

func main() {
	var p1 People = People{
		name: "ljl",
		age:  21,
	}

	var p2 = p1
	p2.age = 33

	fmt.Printf("%#v\n", p1)
	fmt.Printf("%#v\n", p2)
	//main.People{name:"ljl", age:21}
	//main.People{name:"ljl", age:33}

	p1.ChangeAge(200)       //main.People{name:"ljl", age:200}
	p1.ChangeName("ljm")    //&main.People{name:"ljm", age:21}
	fmt.Printf("%#v\n", p1) //main.People{name:"ljm", age:21}   name改了 age没改
}
